Análisis del dataset Bombas_training.csv

El dataset a analizar, del que no se tiene ningún tipo de información, contiene detalles del estado de situación de diversas bombas de agua instaladas en Tanzania, país situado en la costa este de África Central y cuya capital es la ciudad de Dodoma.

1. Carga de librerías y lectura de datos

library(tidytable)
## 
## Adjuntando el paquete: 'tidytable'
## The following objects are masked from 'package:stats':
## 
##     dt, filter, lag
## The following object is masked from 'package:base':
## 
##     %in%
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:tidytable':
## 
##     across, add_count, add_tally, anti_join, arrange, between,
##     bind_cols, bind_rows, c_across, case_match, case_when, coalesce,
##     consecutive_id, count, cross_join, cume_dist, cur_column, cur_data,
##     cur_group_id, cur_group_rows, dense_rank, desc, distinct, filter,
##     first, full_join, group_by, group_cols, group_split, group_vars,
##     if_all, if_any, if_else, inner_join, is_grouped_df, lag, last,
##     lead, left_join, min_rank, mutate, n, n_distinct, na_if, nest_by,
##     nest_join, nth, percent_rank, pick, pull, recode, reframe,
##     relocate, rename, rename_with, right_join, row_number, rowwise,
##     select, semi_join, slice, slice_head, slice_max, slice_min,
##     slice_sample, slice_tail, summarise, summarize, tally, top_n,
##     transmute, tribble, ungroup
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(data.table)
## 
## Adjuntando el paquete: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
## The following objects are masked from 'package:tidytable':
## 
##     %notin%, between, first, fread, last
library(ggplot2)
library(forcats)
library(magrittr)
## 
## Adjuntando el paquete: 'magrittr'
## The following object is masked from 'package:tidytable':
## 
##     extract
library(ggpmisc)
## Cargando paquete requerido: ggpp
## Registered S3 methods overwritten by 'ggpp':
##   method                  from   
##   heightDetails.titleGrob ggplot2
##   widthDetails.titleGrob  ggplot2
## 
## Adjuntando el paquete: 'ggpp'
## The following object is masked from 'package:ggplot2':
## 
##     annotate
library(readr)
library(formattable)

Cargamos el conjunto de datos relativo a las bombas de agua localizadas en Tanzania:

df = fread("C:/Users/Asus/Desktop/DIPLOMA EXPERTA/CURSO/MODULO2/EVALUACION/Entrega/Bombas_training.csv") %>% as.data.table()

Visualicemos la cabecera de nuestro dataset:

head(df)
##       id amount_tsh date_recorded              funder gps_height    installer
##    <int>      <num>        <IDat>              <char>      <int>       <char>
## 1: 69572       6000    2011-03-14               Roman       1390        Roman
## 2:  8776          0    2013-03-06             Grumeti       1399      GRUMETI
## 3: 34310         25    2013-02-25        Lottery Club        686 World vision
## 4: 67743          0    2013-01-28              Unicef        263       UNICEF
## 5: 19728          0    2011-07-13         Action In A          0      Artisan
## 6:  9944         20    2011-03-13 Mkinga Distric Coun          0          DWE
##    longitude   latitude             wpt_name num_private
##        <num>      <num>               <char>       <int>
## 1:  34.93809  -9.856322                 none           0
## 2:  34.69877  -2.147466             Zahanati           0
## 3:  37.46066  -3.821329          Kwa Mahundi           0
## 4:  38.48616 -11.155298 Zahanati Ya Nanyumbu           0
## 5:  31.13085  -1.825359              Shuleni           0
## 6:  39.17280  -4.765587               Tajiri           0
##                      basin  subvillage  region region_code district_code
##                     <char>      <char>  <char>       <int>         <int>
## 1:              Lake Nyasa    Mnyusi B  Iringa          11             5
## 2:           Lake Victoria     Nyamara    Mara          20             2
## 3:                 Pangani     Majengo Manyara          21             4
## 4: Ruvuma / Southern Coast  Mahakamani  Mtwara          90            63
## 5:           Lake Victoria  Kyanyamisa  Kagera          18             1
## 6:                 Pangani Moa/Mwereme   Tanga           4             8
##          lga       ward population public_meeting             recorded_by
##       <char>     <char>      <int>         <lgcl>                  <char>
## 1:    Ludewa   Mundindi        109           TRUE GeoData Consultants Ltd
## 2: Serengeti      Natta        280             NA GeoData Consultants Ltd
## 3: Simanjiro    Ngorika        250           TRUE GeoData Consultants Ltd
## 4:  Nanyumbu   Nanyumbu         58           TRUE GeoData Consultants Ltd
## 5:   Karagwe Nyakasimbi          0           TRUE GeoData Consultants Ltd
## 6:    Mkinga        Moa          1           TRUE GeoData Consultants Ltd
##    scheme_management                 scheme_name permit construction_year
##               <char>                      <char> <lgcl>             <int>
## 1:               VWC                       Roman  FALSE              1999
## 2:             Other                               TRUE              2010
## 3:               VWC Nyumba ya mungu pipe scheme   TRUE              2009
## 4:               VWC                               TRUE              1986
## 5:                                                 TRUE                 0
## 6:               VWC                   Zingibali   TRUE              2009
##    extraction_type extraction_type_group extraction_type_class management
##             <char>                <char>                <char>     <char>
## 1:         gravity               gravity               gravity        vwc
## 2:         gravity               gravity               gravity        wug
## 3:         gravity               gravity               gravity        vwc
## 4:     submersible           submersible           submersible        vwc
## 5:         gravity               gravity               gravity      other
## 6:     submersible           submersible           submersible        vwc
##    management_group        payment payment_type water_quality quality_group
##              <char>         <char>       <char>        <char>        <char>
## 1:       user-group   pay annually     annually          soft          good
## 2:       user-group      never pay    never pay          soft          good
## 3:       user-group pay per bucket   per bucket          soft          good
## 4:       user-group      never pay    never pay          soft          good
## 5:            other      never pay    never pay          soft          good
## 6:       user-group pay per bucket   per bucket         salty         salty
##        quantity quantity_group               source          source_type
##          <char>         <char>               <char>               <char>
## 1:       enough         enough               spring               spring
## 2: insufficient   insufficient rainwater harvesting rainwater harvesting
## 3:       enough         enough                  dam                  dam
## 4:          dry            dry          machine dbh             borehole
## 5:     seasonal       seasonal rainwater harvesting rainwater harvesting
## 6:       enough         enough                other                other
##    source_class             waterpoint_type waterpoint_type_group
##          <char>                      <char>                <char>
## 1:  groundwater          communal standpipe    communal standpipe
## 2:      surface          communal standpipe    communal standpipe
## 3:      surface communal standpipe multiple    communal standpipe
## 4:  groundwater communal standpipe multiple    communal standpipe
## 5:      surface          communal standpipe    communal standpipe
## 6:      unknown communal standpipe multiple    communal standpipe

El conjunto de datos consta de \(59400\) filas y \(40\) columnas, por lo que tenemos \(40\) variables posibles a analizar, lo que implica que el dataset tiene un tamaño de \(2376000\) datos.

print(nrow(df)*ncol(df))
## [1] 2376000

Veamos el tipo de variables con las que estamos trabajando y cómo están clasificadas:

glimpse(df)
## Rows: 59,400
## Columns: 40
## $ id                    <int> 69572, 8776, 34310, 67743, 19728, 9944, 19816, 5…
## $ amount_tsh            <dbl> 6000, 0, 25, 0, 0, 20, 0, 0, 0, 0, 0, 200, 0, 0,…
## $ date_recorded         <IDate> 2011-03-14, 2013-03-06, 2013-02-25, 2013-01-28…
## $ funder                <chr> "Roman", "Grumeti", "Lottery Club", "Unicef", "A…
## $ gps_height            <int> 1390, 1399, 686, 263, 0, 0, 0, 0, 0, 0, 62, 1062…
## $ installer             <chr> "Roman", "GRUMETI", "World vision", "UNICEF", "A…
## $ longitude             <dbl> 34.93809, 34.69877, 37.46066, 38.48616, 31.13085…
## $ latitude              <dbl> -9.85632177, -2.14746569, -3.82132853, -11.15529…
## $ wpt_name              <chr> "none", "Zahanati", "Kwa Mahundi", "Zahanati Ya …
## $ num_private           <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ basin                 <chr> "Lake Nyasa", "Lake Victoria", "Pangani", "Ruvum…
## $ subvillage            <chr> "Mnyusi B", "Nyamara", "Majengo", "Mahakamani", …
## $ region                <chr> "Iringa", "Mara", "Manyara", "Mtwara", "Kagera",…
## $ region_code           <int> 11, 20, 21, 90, 18, 4, 17, 17, 14, 18, 60, 10, 1…
## $ district_code         <int> 5, 2, 4, 63, 1, 8, 3, 3, 6, 1, 43, 5, 2, 7, 6, 2…
## $ lga                   <chr> "Ludewa", "Serengeti", "Simanjiro", "Nanyumbu", …
## $ ward                  <chr> "Mundindi", "Natta", "Ngorika", "Nanyumbu", "Nya…
## $ population            <int> 109, 280, 250, 58, 0, 1, 0, 0, 0, 0, 345, 250, 0…
## $ public_meeting        <lgl> TRUE, NA, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR…
## $ recorded_by           <chr> "GeoData Consultants Ltd", "GeoData Consultants …
## $ scheme_management     <chr> "VWC", "Other", "VWC", "VWC", "", "VWC", "VWC", …
## $ scheme_name           <chr> "Roman", "", "Nyumba ya mungu pipe scheme", "", …
## $ permit                <lgl> FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
## $ construction_year     <int> 1999, 2010, 2009, 1986, 0, 2009, 0, 0, 0, 0, 201…
## $ extraction_type       <chr> "gravity", "gravity", "gravity", "submersible", …
## $ extraction_type_group <chr> "gravity", "gravity", "gravity", "submersible", …
## $ extraction_type_class <chr> "gravity", "gravity", "gravity", "submersible", …
## $ management            <chr> "vwc", "wug", "vwc", "vwc", "other", "vwc", "vwc…
## $ management_group      <chr> "user-group", "user-group", "user-group", "user-…
## $ payment               <chr> "pay annually", "never pay", "pay per bucket", "…
## $ payment_type          <chr> "annually", "never pay", "per bucket", "never pa…
## $ water_quality         <chr> "soft", "soft", "soft", "soft", "soft", "salty",…
## $ quality_group         <chr> "good", "good", "good", "good", "good", "salty",…
## $ quantity              <chr> "enough", "insufficient", "enough", "dry", "seas…
## $ quantity_group        <chr> "enough", "insufficient", "enough", "dry", "seas…
## $ source                <chr> "spring", "rainwater harvesting", "dam", "machin…
## $ source_type           <chr> "spring", "rainwater harvesting", "dam", "boreho…
## $ source_class          <chr> "groundwater", "surface", "surface", "groundwate…
## $ waterpoint_type       <chr> "communal standpipe", "communal standpipe", "com…
## $ waterpoint_type_group <chr> "communal standpipe", "communal standpipe", "com…

Gracias a la función glimpse obtenemos un resumen de los tipos de las variables con las que vamos a trabajar. Cabe destacar:

  • amount_tsh: podría referirse a la cantidad de carga estática total hídrica (TSH en inglés, amount of total static head) o una cantidad monetaria, ya que TSH es Tanzanian Shilling, el chelín tanzano. Esta indeterminación en el significado de la variable podría causar problemas más adelante, sería necesaria más información al respecto. Caracterizado como double, en cualquiera de los casos, este tipo sería el correcto.

  • public_meeting: vemos con un primer análisis que esta variable presenta NA.

  • num_private: parece ser una variable que vale 0 para todas las bombas de agua.

Nada destacable del resto de variables.

Procesado y limpieza de datos

No podemos asegurar, debido al tamaño del dataset, que existan más valores NA en el resto de variables. Por esta razón, vamos a calcular el porcentaje y la cantidad de valores NA con el siguiente fragmento de código:

library(skimr) # cargamos el paquete de la función skim()
library(formattable)

df$date_recorded <- as.Date(df$date_recorded, format = "%Y-%m-%d") # Estandarizamos el formato de fecha para evitar errores futuros
desc_df = skim(df)


var_type_missing_df <- desc_df %>%
  mutate(n_missing_perc = 100 * round(1-complete_rate, 3)) %>%
  select(skim_type, skim_variable, n_missing, n_missing_perc) %>%
  arrange(skim_type, n_missing)

formattable(var_type_missing_df)
skim_type skim_variable n_missing n_missing_perc
Date date_recorded 0 0.0
character funder 0 0.0
character installer 0 0.0
character wpt_name 0 0.0
character basin 0 0.0
character subvillage 0 0.0
character region 0 0.0
character lga 0 0.0
character ward 0 0.0
character recorded_by 0 0.0
character scheme_management 0 0.0
character scheme_name 0 0.0
character extraction_type 0 0.0
character extraction_type_group 0 0.0
character extraction_type_class 0 0.0
character management 0 0.0
character management_group 0 0.0
character payment 0 0.0
character payment_type 0 0.0
character water_quality 0 0.0
character quality_group 0 0.0
character quantity 0 0.0
character quantity_group 0 0.0
character source 0 0.0
character source_type 0 0.0
character source_class 0 0.0
character waterpoint_type 0 0.0
character waterpoint_type_group 0 0.0
logical permit 3056 5.1
logical public_meeting 3334 5.6
numeric id 0 0.0
numeric amount_tsh 0 0.0
numeric gps_height 0 0.0
numeric longitude 0 0.0
numeric latitude 0 0.0
numeric num_private 0 0.0
numeric region_code 0 0.0
numeric district_code 0 0.0
numeric population 0 0.0
numeric construction_year 0 0.0

Vemos de la tabla anterior que solamente las variables permit y public_meeting contienen valores NA. Más concretamente:

  • La variable permit contiene 3056 valores NA, lo que supone un \(5.1\%\) sobre el total de datos del dataset.
  • La variable public_meetingcontiene 3334 valores NA, lo que supone un \(5.6\%\) sobre el total de datos del dataset.

Vamos a hacer limpieza de los datos, las explicaciones pertinentes aparecen como comentarios en los códigos.

#La columna num_private sólo contiene valores 0, la eliminamos
df$num_private = NULL
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known y los valores Not known por Not Known para unificar
df$installer[df$installer == ""] <- "Not Known"
df$installer[df$installer == "Not known"] <- "Not Known"
# Calcular la media de la columna (excluyendo el valor específico -0.00000002)
mediaLatitud <- mean(df$latitude[df$latitude != -0.00000002], na.rm = TRUE)
# Sustituir el valor específico por la media
df$latitude[df$latitude == -0.00000002] <- mediaLatitud
# Calcular la media de la columna (excluyendo el valor específico 0.00000)
mediaLong <- mean(df$longitude[df$longitude != 0.00000], na.rm = TRUE)
# Sustituir el valor específico por la media
df$longitude[df$longitude == 0.00000] <- mediaLong
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$wpt_name[df$wpt_name == "none"] <- "Not Known"
df$wpt_name[df$wpt_name == "None"] <- "Not Known"
df$wpt_name[df$wpt_name == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$subvillage[df$subvillage == "none"] <- "Not Known"
df$subvillage[df$subvillage == "None"] <- "Not Known"
df$subvillage[df$subvillage == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$region[df$region == "none"] <- "Not Known"
df$region[df$region == "None"] <- "Not Known"
df$region[df$region == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$scheme_management[df$scheme_management == "none"] <- "Not Known"
df$scheme_management[df$scheme_management == "None"] <- "Not Known"
df$scheme_management[df$scheme_management == ""] <- "Not Known"
#Las celdas sin valor (celdas vacías) las sustituimos por Not Known
df$scheme_name[df$scheme_name == "none"] <- "Not Known"
df$scheme_name[df$scheme_name == "None"] <- "Not Known"
df$scheme_name[df$scheme_name == ""] <- "Not Known"
#Las celdas con Na. TRUE/FALSE las sustituimos por un 3er estado NOT KNOWN
df$public_meeting[is.na(df$public_meeting)] <- "NOT KNOWN"
df$public_meeting[df$public_meeting == ""] <- "NOT KNOWN"
#Las celdas con Na. TRUE/FALSE las sustituimos por un 3er estado NOT KNOWN
df$permit[is.na(df$permit)] <- "NOT KNOWN"
df$permit[df$permit == ""] <- "NOT KNOWN"

Análisis

Primero, nos aseguramos de que nuestro dataset está en formato data.table.

dfBombas = as.data.table(df)

Nos planteamos diversas preguntas para abordar el dataset.

¿Es posible visualizar dónde se situa cada bomba de agua geográficamente?

Para abordar esta pregunta hacemos uso de los datos relativos a las coordenadas geográficas de nuestro dataset (latitud y longitud) que nos permiten localizar las bombas de agua en un mapa. En primer lugar, podemos hacer una representación estática donde obtendremos el contorno de Tanzania y la localización de las bombas de agua en función de la región a la que pertenecen. Es una representación muy útil para hacernos una idea de qué región posee más bombas de agua. Usamos las variables latitude y longitude.

#Podemos visualizar dónde están cada uno de los pozos por región en Tanzania
dfBombas$region <- as.factor(dfBombas$region)

ggplot(dfBombas, aes(x = dfBombas$longitude, y = dfBombas$latitude, color = region)) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = "Mapa de Pozos por Región",
       x = "Longitud",
       y = "Latitud",
       color = "Región")

Como vemos, en primera instancia parece que la región de Iringa tiene una mayor densidad de bombas de agua, así como la región de Mbeya (afirmamos esto por la aparente densidad de los puntos de color del gráfico). Asimismo, parece que la región de Rukwa y Dar es Salaam son las que menos número de bombas tienen.

Podemos crear también un mapa interactivo con Tanzania de fondo para una mayor comprensión y visualización de la localización de todas las bombas de agua y que nos permitirá ver si tienen una fuente de agua o más (no subterránea) en cada una de las regiones.

# Cargar el paquete leaflet
library(leaflet)

# Crear un mapa interactivo
leaflet(dfBombas) %>%
  addTiles() %>%
  addCircleMarkers(~longitude, ~latitude, color = ~region, radius = 5,
                   popup = ~region)

Vemos que la localización de bombas de agua abunda en las regiones que están próximas a lagos y estarán localizadas donde exista agua apta para el consumo y no proveniente del océano (agua salada). Vemos una alta concentración de bombas en las regiones que lindan con el Lago Victoria, el Lago Rukwa y el Lago Tanganyika, entre otros.

¿Cuáles son las regiones de Tanzania que tienen un mayor número de bombas de agua?

conteoRegion = table(dfBombas$region)
formattable(conteoRegion)
## 
##        Arusha Dar es Salaam        Dodoma        Iringa        Kagera 
##          3350           805          2201          5294          3316 
##        Kigoma   Kilimanjaro         Lindi       Manyara          Mara 
##          2816          4379          1546          1583          1969 
##         Mbeya      Morogoro        Mtwara        Mwanza         Pwani 
##          4639          4006          1730          3102          2635 
##         Rukwa        Ruvuma     Shinyanga       Singida        Tabora 
##          1808          2640          4982          2093          1959 
##         Tanga 
##          2547

Vemos la tabla de frecuencias correspondientes a la cantidad de bombas de agua por región. Vamos a ver qué región tiene más bombas de agua. Para ello realizamos un conteo.

# Obtener el valor máximo de la tabla de frecuencias
valor_maximo = max(conteoRegion)

# Encontrar las categorías asociadas al valor máximo
categorias_maximas = names(conteoRegion[conteoRegion == valor_maximo])

# Mostrar el resultado
cat("El valor máximo es:", valor_maximo, "y corresponde a la(s) categoría(s):", categorias_maximas, "\n")
## El valor máximo es: 5294 y corresponde a la(s) categoría(s): Iringa

Obtenemos que la región con más bombas de agua es Iringa con 5294.

¿Cuál es la región que tiene un menor número de bombas de agua?

Podemos seguir el mismo proceso que antes para averiguar qué región es la que menos bombas de agua tiene.

# Obtener el valor máximo de la tabla de frecuencias
valor_min = min(conteoRegion)

# Encontrar las categorías asociadas al valor máximo
categorias_min = names(conteoRegion[conteoRegion == valor_min])

# Mostrar el resultado
cat("El valor máximo es:", valor_min, "y corresponde a la(s) categoría(s):", categorias_min, "\n")
## El valor máximo es: 805 y corresponde a la(s) categoría(s): Dar es Salaam

Obtenemos que la región con menos bombas de agua es Dar es Salaam con 805.

¿Número de bombas de agua por región?

Es posible ver gráficamente la distribución de bombas de agua por región haciendo uso de un gráfico de barras. Lo representamos:

# Ordenar la tabla de frecuencias de mayor a menor
tabla_ordenada <- sort(conteoRegion, decreasing = TRUE)


# Crear el gráfico de barras horizontal
barplot_heights <- barplot(tabla_ordenada, main = "Bombas de Agua por Región (Tanzania)", horiz = TRUE, 
                           xlab = "Cantidad de Bombas de Agua", col = "lightblue", las = 1)

# Añadir etiquetas con las cantidades sobre las barras
text(x = tabla_ordenada, y = barplot_heights, labels = tabla_ordenada, pos = 4, cex = 0.8, col = "black")

Vemos en el gráfico anterior las regiones ordenadas de menor cantidad de bombas de agua a mayor, como podemos ver, gracias a las etiquetas en cada barra.

¿Distribución de la construcción de las bombas de agua en función del año?

Vamos a realizar en primer lugar un conteo de las bombas en función del año. Para ello, construimos una tabla de frecuencias.

# Contar las bombas por año
bombasYear = table(dfBombas$construction_year)

# Mostrar la tabla con los años y las frecuencias
print(bombasYear)
## 
##     0  1960  1961  1962  1963  1964  1965  1966  1967  1968  1969  1970  1971 
## 20709   102    21    30    85    40    19    17    88    77    59   411   145 
##  1972  1973  1974  1975  1976  1977  1978  1979  1980  1981  1982  1983  1984 
##   708   184   676   437   414   202  1037   192   811   238   744   488   779 
##  1985  1986  1987  1988  1989  1990  1991  1992  1993  1994  1995  1996  1997 
##   945   434   302   521   316   954   324   640   608   738  1014   811   644 
##  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010 
##   966   979  2091   540  1075  1286  1123  1011  1471  1587  2613  2533  2645 
##  2011  2012  2013 
##  1256  1084   176
# Visualizar en un gráfico de barras
barplot(bombasYear, main = "Cantidad de Bombas de Agua Construidas por Año",
        xlab = "Año", ylab = "Cantidad", col = "lightgreen", las = 2, cex.names = 0.8)

Como vemos existe una gran cantidad de bombas construidas en el año 0, esto nos indica que existe un gran cantidad de bombas de agua que tienen un año de construcción desconocido. Eliminar las filas con años 0 no es una opción ya que estaríamos perdiendo mucha información. Por ello, para obtener una cierta información sobre la distribución de la cantidad de bombas de agua en función del año de construcción, vamos a representar el gráfico anterior eliminando el dato 0.

¿Distribución no sesgada de la construcción de bombas de agua en función del año?

Eliminamos de nuestro gráfico anterior el año 0 (solamente del gráfico, no del dataset).

# Crear la tabla de frecuencias por año
bombasYear = table(dfBombas$construction_year)

# Excluir el año 0 solo de la representación gráfica
bombasYear_filtrado = bombasYear[names(bombasYear) != "0"]

# Visualizar en un gráfico de barras sin incluir el año 0
barplot(bombasYear_filtrado, main = "Cantidad de Bombas de Agua Construidas por Año (Sin Año 0)",
        xlab = "Año", ylab = "Cantidad", col = "lightgreen", las = 2, cex.names = 0.8) 

Como vemos, eliminando el “año 0” obtenemos una información no sesgada que nos permite visualizar la “realidad” sobre los años de construcción de las bombas. Vemos que a partir de la década de los años 90 existe una tendencia al alza de construcción de bombas de agua. Puede ser debida a la evolución de las tecnologías o a que han tenido acceso a las mismas para explotar sus propias fuentes de agua. Calculamos a continuación el año con un mayor número de bombas construidas.

# Encontrar el año con más bombas construidas
yearMax = names(bombasYear_filtrado[which.max(bombasYear_filtrado)])

# Mostrar el resultado
cat("El año con mayor número de bombas construidas es:", yearMax, "con", max(bombasYear_filtrado), "bombas.\n")
## El año con mayor número de bombas construidas es: 2010 con 2645 bombas.

Como vemos, el año 2010 tiene el máximo de bombas de agua construidas con \(2645\). También es preciso calcular el año con menos construcciones de bombas.

# Encontrar el año con menos bombas construidas
yearMin = names(bombasYear_filtrado[which.min(bombasYear_filtrado)])

# Mostrar el resultado
cat("El año con menor número de bombas construidas es:", yearMin, "con", min(bombasYear_filtrado), "bombas.\n")
## El año con menor número de bombas construidas es: 1966 con 17 bombas.

Es lógico, que el año con menor construcciones de bombas se encuentre fuera de la región con tendencia al alza de construcción de bombas (a partir de la década de los 90), siendo este año 1966 con solamente 17 bombas de agua cosntruidas.

¿ Se sitúan las bombas en función de la depresión geográfica? Region comparada con basin

Vamos a analizar la región con el tipo de depresión geográfica en la que se encuentran las bombas. Para ello, relacionamos la variable region con la variable basin. Mostramos la tabla de frecuencias para hacernos una idea inicial de lo que analizamos.

# Contar la cantidad de bombas por región y cuenca (basin)
conteo_por_region_basin <- table(dfBombas$region, dfBombas$basin)

# Mostrar el resultado
formattable(conteo_por_region_basin)
##                
##                 Internal Lake Nyasa Lake Rukwa Lake Tanganyika Lake Victoria
##   Arusha        1309        0          0          0              32         
##   Dar es Salaam    0        0          0          0               0         
##   Dodoma         827        0          0          0               0         
##   Iringa           0     1582          0          0               0         
##   Kagera           0        0          0        341            2975         
##   Kigoma           0        0          0       2816               0         
##   Kilimanjaro    169        0          0          0               0         
##   Lindi            0        0          0          0               0         
##   Manyara       1206        0          0          0               0         
##   Mara             0        0          0          0            1969         
##   Mbeya            0     2430       1427          0               0         
##   Morogoro         0        0          0          0               0         
##   Mtwara           0        0          0          0               0         
##   Mwanza           0        0          0         99            3003         
##   Pwani            0        0          0          0               0         
##   Rukwa            0        0       1011        797               0         
##   Ruvuma           0     1073          0          0               0         
##   Shinyanga     1641        0          0       1072            2269         
##   Singida       1992        0          1          8               0         
##   Tabora         641        0         15       1299               0         
##   Tanga            0        0          0          0               0         
##                
##                 Pangani Rufiji Ruvuma / Southern Coast Wami / Ruvu
##   Arusha        2009       0      0                       0       
##   Dar es Salaam    0       0      0                     805       
##   Dodoma           0     359      0                    1015       
##   Iringa           0    3712      0                       0       
##   Kagera           0       0      0                       0       
##   Kigoma           0       0      0                       0       
##   Kilimanjaro   4210       0      0                       0       
##   Lindi            0      90   1456                       0       
##   Manyara        288       0      0                      89       
##   Mara             0       0      0                       0       
##   Mbeya            0     782      0                       0       
##   Morogoro         0    1893      0                    2113       
##   Mtwara           0       0   1730                       0       
##   Mwanza           0       0      0                       0       
##   Pwani            0     784      0                    1851       
##   Rukwa            0       0      0                       0       
##   Ruvuma           0     260   1307                       0       
##   Shinyanga        0       0      0                       0       
##   Singida          0      92      0                       0       
##   Tabora           0       4      0                       0       
##   Tanga         2433       0      0                     114

La tabla anterior nos permite visualizar cuántas bombas de agua hay en cada región (como en el análisis anterior) y cómo están distribuidas, es decir, de dónde toman el agua dependiendo de las fuentes de la misma que haya en cada región. Calculamos en forma de porcentajes la información que nos proporciona la tabla de frecuencias anterior.

porcentajes_por_fila <- prop.table(conteo_por_region_basin, margin = 1) * 100
porcentajes_por_fila
##                
##                     Internal   Lake Nyasa   Lake Rukwa Lake Tanganyika
##   Arusha         39.07462687   0.00000000   0.00000000      0.00000000
##   Dar es Salaam   0.00000000   0.00000000   0.00000000      0.00000000
##   Dodoma         37.57383008   0.00000000   0.00000000      0.00000000
##   Iringa          0.00000000  29.88288629   0.00000000      0.00000000
##   Kagera          0.00000000   0.00000000   0.00000000     10.28347407
##   Kigoma          0.00000000   0.00000000   0.00000000    100.00000000
##   Kilimanjaro     3.85932861   0.00000000   0.00000000      0.00000000
##   Lindi           0.00000000   0.00000000   0.00000000      0.00000000
##   Manyara        76.18445989   0.00000000   0.00000000      0.00000000
##   Mara            0.00000000   0.00000000   0.00000000      0.00000000
##   Mbeya           0.00000000  52.38197887  30.76093986      0.00000000
##   Morogoro        0.00000000   0.00000000   0.00000000      0.00000000
##   Mtwara          0.00000000   0.00000000   0.00000000      0.00000000
##   Mwanza          0.00000000   0.00000000   0.00000000      3.19148936
##   Pwani           0.00000000   0.00000000   0.00000000      0.00000000
##   Rukwa           0.00000000   0.00000000  55.91814159     44.08185841
##   Ruvuma          0.00000000  40.64393939   0.00000000      0.00000000
##   Shinyanga      32.93857888   0.00000000   0.00000000     21.51746287
##   Singida        95.17439083   0.00000000   0.04777831      0.38222647
##   Tabora         32.72077591   0.00000000   0.76569678     66.30934150
##   Tanga           0.00000000   0.00000000   0.00000000      0.00000000
##                
##                 Lake Victoria      Pangani       Rufiji Ruvuma / Southern Coast
##   Arusha           0.95522388  59.97014925   0.00000000              0.00000000
##   Dar es Salaam    0.00000000   0.00000000   0.00000000              0.00000000
##   Dodoma           0.00000000   0.00000000  16.31076783              0.00000000
##   Iringa           0.00000000   0.00000000  70.11711371              0.00000000
##   Kagera          89.71652593   0.00000000   0.00000000              0.00000000
##   Kigoma           0.00000000   0.00000000   0.00000000              0.00000000
##   Kilimanjaro      0.00000000  96.14067139   0.00000000              0.00000000
##   Lindi            0.00000000   0.00000000   5.82147477             94.17852523
##   Manyara          0.00000000  18.19330385   0.00000000              0.00000000
##   Mara           100.00000000   0.00000000   0.00000000              0.00000000
##   Mbeya            0.00000000   0.00000000  16.85708127              0.00000000
##   Morogoro         0.00000000   0.00000000  47.25411882              0.00000000
##   Mtwara           0.00000000   0.00000000   0.00000000            100.00000000
##   Mwanza          96.80851064   0.00000000   0.00000000              0.00000000
##   Pwani            0.00000000   0.00000000  29.75332068              0.00000000
##   Rukwa            0.00000000   0.00000000   0.00000000              0.00000000
##   Ruvuma           0.00000000   0.00000000   9.84848485             49.50757576
##   Shinyanga       45.54395825   0.00000000   0.00000000              0.00000000
##   Singida          0.00000000   0.00000000   4.39560440              0.00000000
##   Tabora           0.00000000   0.00000000   0.20418581              0.00000000
##   Tanga            0.00000000  95.52414605   0.00000000              0.00000000
##                
##                  Wami / Ruvu
##   Arusha          0.00000000
##   Dar es Salaam 100.00000000
##   Dodoma         46.11540209
##   Iringa          0.00000000
##   Kagera          0.00000000
##   Kigoma          0.00000000
##   Kilimanjaro     0.00000000
##   Lindi           0.00000000
##   Manyara         5.62223626
##   Mara            0.00000000
##   Mbeya           0.00000000
##   Morogoro       52.74588118
##   Mtwara          0.00000000
##   Mwanza          0.00000000
##   Pwani          70.24667932
##   Rukwa           0.00000000
##   Ruvuma          0.00000000
##   Shinyanga       0.00000000
##   Singida         0.00000000
##   Tabora          0.00000000
##   Tanga           4.47585395

Como vemos, por ejemplo, la región de Dar es Salaam tiene todas sus bombas tomando agua de los ríos Wami/Ruvu, se corresponderá con la única fuente de la que pueden obtener el agua. Lo mismo ocurre con la región Kigoma que tiene todas sus bombas localizadas en el Lago Tanganyika. Vemos que el resto de regiones toman el agua de diversas fuentes, lo que nos da información del diferente acceso a fuentes de agua de las distintas regiones que conforman el país de Tanzania. Podemos visualizar lo anterior si hacemos uso de un mapa de calor:

heatmap(conteo_por_region_basin, main = "Bombas de Agua por Región y Cuenca", col = heat.colors(20), scale = "none", 
        xlab = "Cuenca (Basin)", ylab = "Región")
legend("topright",               
       legend = c("Low", "Medium", "High"),
       fill = heat.colors(3),    
       title = "Density Level")   

¿Calidad del agua que extraen las bombas de las distintas regiones? ¿Cómo se distribuyen?

Resulta también interesante evaluar la calidad del agua en las distintas regiones y posteriormente, ver si coincide con las regiones que más bombas de agua tienen.

#Realizamos una tabla de frecuencias para relacionar ambas magnitudes
tablaRegCal = table(dfBombas$region, dfBombas$quality_group)
formattable(tablaRegCal)
##                
##                 colored fluoride good milky salty unknown
##   Arusha          14     131     3154    2    12    37   
##   Dar es Salaam    0       2      541    2   241    19   
##   Dodoma          30       0     1746   19   394    12   
##   Iringa           2       0     5226    0    27    39   
##   Kagera          27       3     3078   47    85    76   
##   Kigoma           8       1     2738   12    20    37   
##   Kilimanjaro      1       2     4262    0    68    46   
##   Lindi            9       0      852   26   501   158   
##   Manyara          5      14     1341    3   197    23   
##   Mara             6       1     1369    5   531    57   
##   Mbeya           97      22     4355   20    74    71   
##   Morogoro        86      15     3167   21   555   162   
##   Mtwara          16       2     1352   24   297    39   
##   Mwanza           5       2     2524   38   302   231   
##   Pwani           23       1     2302   11   271    27   
##   Rukwa            9       0     1500   13   184   102   
##   Ruvuma          10       0     2594    1    10    25   
##   Shinyanga       42      12     3844  454   433   197   
##   Singida          9       4     1493   11   109   467   
##   Tabora          58       2     1463   88   321    27   
##   Tanga           33       3     1917    7   563    24

La región con un mayor número de bombas que extraen agua de buena calidad es Iringa con \(5226\), seguida por Mbeya con \(4355\) y Kilimanjaro con \(4262\).

Vemos de los datos obtenidos que el agua obtenida por las bombas de la gran mayoría de las regiones tiene una buena calidad (good), salvo las regiones de Dar es Salaam y Lindi que tienen un menor número de bombas con buena calidad de agua. Pero es necesario analizar estas dos regiones en perspectiva.

  • La región de Dar es Salaam. Hemos visto anteriormente que esta región tiene un total de \(805\) bombas de agua, esto implica que un porcentaje importante, el \(67.2\%\), de sus bombas extraen agua de buena calidad.

  • La región de Lindi. De nuestro análisis anterior, hemos obtenido que esta región tiene \(1546\) extrayendo agua. Esto quiere decir, que el \(55.1\%\) de las bombas están extrayendo agua de buena calidad. La población obtiene su agua de buena calidad sólo de la mitad de las bombas que poseen.

Sería interesante ver la tabla anterior en forma de porcentajes.

porcentajeAguaCal = prop.table(tablaRegCal, margin = 1) * 100
tablaFormatPorc = formattable(porcentajeAguaCal)
tablaFormatPorc 
##                
##                 colored     fluoride    good        milky       salty      
##   Arusha         0.41791045  3.91044776 94.14925373  0.05970149  0.35820896
##   Dar es Salaam  0.00000000  0.24844720 67.20496894  0.24844720 29.93788820
##   Dodoma         1.36301681  0.00000000 79.32757837  0.86324398 17.90095411
##   Iringa         0.03777862  0.00000000 98.71552701  0.00000000  0.51001133
##   Kagera         0.81423402  0.09047045 92.82267793  1.41737033  2.56332931
##   Kigoma         0.28409091  0.03551136 97.23011364  0.42613636  0.71022727
##   Kilimanjaro    0.02283626  0.04567253 97.32815711  0.00000000  1.55286595
##   Lindi          0.58214748  0.00000000 55.10996119  1.68175938 32.40620957
##   Manyara        0.31585597  0.88439672 84.71257107  0.18951358 12.44472521
##   Mara           0.30472321  0.05078720 69.52767902  0.25393601 26.96800406
##   Mbeya          2.09096788  0.47424014 93.87799095  0.43112740  1.59517137
##   Morogoro       2.14677983  0.37443834 79.05641538  0.52421368 13.85421867
##   Mtwara         0.92485549  0.11560694 78.15028902  1.38728324 17.16763006
##   Mwanza         0.16118633  0.06447453 81.36686009  1.22501612  9.73565442
##   Pwani          0.87286528  0.03795066 87.36242884  0.41745731 10.28462998
##   Rukwa          0.49778761  0.00000000 82.96460177  0.71902655 10.17699115
##   Ruvuma         0.37878788  0.00000000 98.25757576  0.03787879  0.37878788
##   Shinyanga      0.84303493  0.24086712 77.15776796  9.11280610  8.69128864
##   Singida        0.43000478  0.19111323 71.33301481  0.52556140  5.20783564
##   Tabora         2.96069423  0.10209290 74.68095967  4.49208780 16.38591118
##   Tanga          1.29564193  0.11778563 75.26501767  0.27483314 22.10443659
##                
##                 unknown    
##   Arusha         1.10447761
##   Dar es Salaam  2.36024845
##   Dodoma         0.54520672
##   Iringa         0.73668304
##   Kagera         2.29191797
##   Kigoma         1.31392045
##   Kilimanjaro    1.05046814
##   Lindi         10.21992238
##   Manyara        1.45293746
##   Mara           2.89487049
##   Mbeya          1.53050226
##   Morogoro       4.04393410
##   Mtwara         2.25433526
##   Mwanza         7.44680851
##   Pwani          1.02466793
##   Rukwa          5.64159292
##   Ruvuma         0.94696970
##   Shinyanga      3.95423525
##   Singida       22.31247014
##   Tabora         1.37825421
##   Tanga          0.94228504

Vemos que el porcentaje para cada región de calidad de agua desconocida (unknown) es menor del \(7\%\) (exceptuando la región de Singida con un \(22.3\%\) y la región de Lindi con un \(10.2\%\)), por lo que podemos decir que en conjunto el porcentaje de datos desconocidos es aceptable.

Calculamos el total de los pozos que tienen la calidad del agua “good” para evaluar la calidad del agua general que extraen todas las bombas de agua de Tanzania.

dataCal = data.frame(tablaRegCal)
total_freq_good = sum(dataCal$Freq[dataCal$Var2 == "good"])
print(total_freq_good)
## [1] 50818

Del total de las bombas de agua presentes en el país (\(59400\)), \(50818\) extraen agua de calidad buena estaríamos hablando del \(85.6\%\). Es decir, solamente el \(14.4\%\) de las bombas no está proporcionando agua apta para el consumo.

Podemos representar gráficamente el número de bombas de agua de cada región en función de la calidad del agua.

# Crear el gráfico de barras apiladas
ggplot(dataCal, aes(x = Var1, y = Freq, fill = Var2)) +
  geom_bar(stat = "identity") +
  labs(title = "Núm bombas de agua vs. Región y calidad del agua",
       x = "Región",
       y = "Número de bombas de agua",
       fill = "Calidad del agua") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Por ejemplo, vemos claramente que la región de Iringa tiene un mayor número de bombas de agua que la extraen de calidad buena, habíamos analizado anteriormente que la región de Iringa obtiene en su mayor parte su agua del río Rufiji por lo que suponemos que la calidad de agua de este río es buena. La siguen Mbeya (obtiene su agua de los lagos Nyasa y Rukwa) y Kilimanjaro que obtiene el \(96\%\) de su agua del río Pangani.

¿Está relacionada la calidad del agua con el tipo de agua que se extrae? quality_group y water_quality

También puede ser interesante ver si la calidad del agua que hemos analizado en el apartado anterior tiene relación con el tipo de agua. Para ello, realizamos una tabla de frecuencias que relacione ambas variables.

tablaCalTipo = table(dfBombas$quality_group, dfBombas$water_quality)
tablaCalTipo
##           
##            coloured fluoride fluoride abandoned milky salty salty abandoned
##   colored       490        0                  0     0     0               0
##   fluoride        0      200                 17     0     0               0
##   good            0        0                  0     0     0               0
##   milky           0        0                  0   804     0               0
##   salty           0        0                  0     0  4856             339
##   unknown         0        0                  0     0     0               0
##           
##             soft unknown
##   colored      0       0
##   fluoride     0       0
##   good     50818       0
##   milky        0       0
##   salty        0       0
##   unknown      0    1876

Vemos que si la calidad del agua es buena, está directamente relacionado con que sea de tipo blanda, es decir, hablamos de un agua que tiene baja concentración de minerales, es más suave y no deja residuos. Y, como vemos de la tabla anterior, obtenemos el mismo número de bombas de agua que extraían agua de calidad buena, \(50818\).

¿Densidad de población por regiones?

Es interesante ver la densidad de población de las regiones y ver si coinciden con las regiones que tienen una mayor cantidad de bombas de agua y con la calidad de dicha agua. Para ello sumamos la población por regiones haciendo uso de las variables population y region.

suma_poblacion <- aggregate(dfBombas$population ~ dfBombas$region, data = dfBombas, sum)
print(suma_poblacion)
##    dfBombas$region dfBombas$population
## 1           Arusha              878501
## 2    Dar es Salaam              193879
## 3           Dodoma                   0
## 4           Iringa              499247
## 5           Kagera                   0
## 6           Kigoma             1408681
## 7      Kilimanjaro              463070
## 8            Lindi              563370
## 9          Manyara              503043
## 10            Mara             1060886
## 11           Mbeya                   0
## 12        Morogoro             1060090
## 13          Mtwara              462674
## 14          Mwanza              202610
## 15           Pwani              920896
## 16           Rukwa              661359
## 17          Ruvuma              525411
## 18       Shinyanga               70251
## 19         Singida              584203
## 20          Tabora                   0
## 21           Tanga              628482

Para una mayor claridad, representamos gráficamente la tabla anterior:

ggplot(suma_poblacion, aes(x = reorder(`dfBombas$region`, -`dfBombas$population`), y = `dfBombas$population`, fill = `dfBombas$region`)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = `dfBombas$population`), vjust = -0.3, size = 3) +
  labs(title = "Población por Región",
       x = "Región",
       y = "Población Total") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "none")

Las tres regiones con más población son Kigoma, Mara y Morogoro. Vamos a ver si existe relación entre la cantidad de población y la cantidad de bombas que extraen agua de calidad buena.

  • Kigoma tiene 1.408.681 habitantes y 2738 bombas de agua.
  • Mara tiene 1.060.886 habitantes y 1369 bombas de agua.
  • Morogoro tiene 1.060.090 habitantes y 3167 bombas de agua.

No existe una aparente relación entre el número de población y la cantidad de bombas de agua que extraen dicha agua de buena calidad. Además, si recordamos, la región de Iringa era la región que tenía un mayor número de bombas que extraen agua de calidad buena (5226) y tiene una población de 499.247.

¿Cantidad de agua de la que dispone cada región en relación con el número de bombas de agua disponibles?

Es interesante seguir con nuestro estudio y ver la cantidad de agua de la que dispone cada región, relacionarla con la población y de nuevo si es proporcional en relación con la cantidad de bombas que extraen agua de buena calidad.

Creamos una tabla de frecuencias donde relacionamos la región (region) con la cantidad de agua (quantity) clasificada como dry, enough, insufficient, seasonal y unknown (seca, suficiente, insuficiente, estacional y desconocida).

tablaCantPob = table(dfBombas$quantity, dfBombas$region)
tablaCantPob
##               
##                Arusha Dar es Salaam Dodoma Iringa Kagera Kigoma Kilimanjaro
##   dry              28           135    561    521    397     72          15
##   enough         1210           576   1067   4365   1927   1887        2584
##   insufficient   1751            50    531    246    744    708        1731
##   seasonal        326            27     42    150    216    125          36
##   unknown          35            17      0     12     32     24          13
##               
##                Lindi Manyara Mara Mbeya Morogoro Mtwara Mwanza Pwani Rukwa
##   dry            307     118   59   640      200    539    372   169   171
##   enough         766     983 1295  2241     1941    764   1425  1898  1211
##   insufficient   346     431  377   958     1620    252   1107   424   321
##   seasonal        83      38  176   781      167    164    153   125    46
##   unknown         44      13   62    19       78     11     45    19    59
##               
##                Ruvuma Shinyanga Singida Tabora Tanga
##   dry             653       393     455    331   110
##   enough         1265      2755     750    953  1323
##   insufficient    495      1044     690    426   877
##   seasonal        207       653     114    236   185
##   unknown          20       137      84     13    52
tablaCantPob_df = data.frame(tablaCantPob)
tablaCantPob_df
##             Var1          Var2 Freq
## 1            dry        Arusha   28
## 2         enough        Arusha 1210
## 3   insufficient        Arusha 1751
## 4       seasonal        Arusha  326
## 5        unknown        Arusha   35
## 6            dry Dar es Salaam  135
## 7         enough Dar es Salaam  576
## 8   insufficient Dar es Salaam   50
## 9       seasonal Dar es Salaam   27
## 10       unknown Dar es Salaam   17
## 11           dry        Dodoma  561
## 12        enough        Dodoma 1067
## 13  insufficient        Dodoma  531
## 14      seasonal        Dodoma   42
## 15       unknown        Dodoma    0
## 16           dry        Iringa  521
## 17        enough        Iringa 4365
## 18  insufficient        Iringa  246
## 19      seasonal        Iringa  150
## 20       unknown        Iringa   12
## 21           dry        Kagera  397
## 22        enough        Kagera 1927
## 23  insufficient        Kagera  744
## 24      seasonal        Kagera  216
## 25       unknown        Kagera   32
## 26           dry        Kigoma   72
## 27        enough        Kigoma 1887
## 28  insufficient        Kigoma  708
## 29      seasonal        Kigoma  125
## 30       unknown        Kigoma   24
## 31           dry   Kilimanjaro   15
## 32        enough   Kilimanjaro 2584
## 33  insufficient   Kilimanjaro 1731
## 34      seasonal   Kilimanjaro   36
## 35       unknown   Kilimanjaro   13
## 36           dry         Lindi  307
## 37        enough         Lindi  766
## 38  insufficient         Lindi  346
## 39      seasonal         Lindi   83
## 40       unknown         Lindi   44
## 41           dry       Manyara  118
## 42        enough       Manyara  983
## 43  insufficient       Manyara  431
## 44      seasonal       Manyara   38
## 45       unknown       Manyara   13
## 46           dry          Mara   59
## 47        enough          Mara 1295
## 48  insufficient          Mara  377
## 49      seasonal          Mara  176
## 50       unknown          Mara   62
## 51           dry         Mbeya  640
## 52        enough         Mbeya 2241
## 53  insufficient         Mbeya  958
## 54      seasonal         Mbeya  781
## 55       unknown         Mbeya   19
## 56           dry      Morogoro  200
## 57        enough      Morogoro 1941
## 58  insufficient      Morogoro 1620
## 59      seasonal      Morogoro  167
## 60       unknown      Morogoro   78
## 61           dry        Mtwara  539
## 62        enough        Mtwara  764
## 63  insufficient        Mtwara  252
## 64      seasonal        Mtwara  164
## 65       unknown        Mtwara   11
## 66           dry        Mwanza  372
## 67        enough        Mwanza 1425
## 68  insufficient        Mwanza 1107
## 69      seasonal        Mwanza  153
## 70       unknown        Mwanza   45
## 71           dry         Pwani  169
## 72        enough         Pwani 1898
## 73  insufficient         Pwani  424
## 74      seasonal         Pwani  125
## 75       unknown         Pwani   19
## 76           dry         Rukwa  171
## 77        enough         Rukwa 1211
## 78  insufficient         Rukwa  321
## 79      seasonal         Rukwa   46
## 80       unknown         Rukwa   59
## 81           dry        Ruvuma  653
## 82        enough        Ruvuma 1265
## 83  insufficient        Ruvuma  495
## 84      seasonal        Ruvuma  207
## 85       unknown        Ruvuma   20
## 86           dry     Shinyanga  393
## 87        enough     Shinyanga 2755
## 88  insufficient     Shinyanga 1044
## 89      seasonal     Shinyanga  653
## 90       unknown     Shinyanga  137
## 91           dry       Singida  455
## 92        enough       Singida  750
## 93  insufficient       Singida  690
## 94      seasonal       Singida  114
## 95       unknown       Singida   84
## 96           dry        Tabora  331
## 97        enough        Tabora  953
## 98  insufficient        Tabora  426
## 99      seasonal        Tabora  236
## 100      unknown        Tabora   13
## 101          dry         Tanga  110
## 102       enough         Tanga 1323
## 103 insufficient         Tanga  877
## 104     seasonal         Tanga  185
## 105      unknown         Tanga   52
# Crear el gráfico de barras apiladas
ggplot(tablaCantPob_df, aes(x = Var2, y = Freq, fill = Var1)) +
  geom_bar(stat = "identity") +
  labs(title = "Cantidad de agua de cada región",
       x = "Región",
       y = "Número de bombas de agua",
       fill = "Cantidad de agua") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Como vemos la región de Iringa obtiene una cantidad de agua “suficiente” para su población. Como hemos visto en el apartado anterior esta región medianamente poblada, comparada con Kigoma, Mara y Morogoro, podríamos decir que obtiene más agua de la que necesita su población. Si tuviéramos información de los litros de agua anuales que recogen las bombas de agua de calidad buena de la región de Iringa podríamos calcular cuántos litros de agua corresponderían a cada ciudadano y compararlos con la cantidad de litros/habitante de las tres regiones más pobladas (que serían significativamente inferiores).

¿Tienen todas las bombas de agua los permisos para funcionar?

Realizamos a continuación el estudio de la proporción de bombas de agua que tienen permisos para funcionar. Para ello, empleamos en este caso la variable permit. Vamos a ver en primer lugar esta información numéricamente.

frecuencia = table(dfBombas$permit)
frecuencia
## 
##     FALSE NOT KNOWN      TRUE 
##     17492      3056     38852

Recordamos, teníamos 59400 bombas.

print((frecuencia["TRUE"]/nrow(dfBombas))*100)
##     TRUE 
## 65.40741

Obtenemos que el 65% de las bombas tienen todos los permisos para funcionar, objetivamente, debería ser un porcentaje superior al 80%. Esto significa que el 30% no tienen permisos para funcionar, por lo que suponemos que se trata de construcciones ilegales.

print((frecuencia["FALSE"]/nrow(dfBombas))*100)
##    FALSE 
## 29.44781

Vemos gráficamente las cantidades anteriores haciendo uso de un gráfico de barras.

frecuencia1 <- c("FALSE" = 17492, "NOT KNOWN" = 3056, "TRUE" = 38852)
# Crear el barplot
barplot_heights1= barplot(frecuencia,
        main = "Frecuencia de valores en la columna 'status'",
        xlab = "Valores",
        ylab = "Frecuencia",
        col = c("lightblue", "pink", "lightyellow"),
        ylim = c(0,max(frecuencia)+10),
        border = "black")